package com.bs.process.project.service.impl;

import java.io.IOException;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import com.bs.process.project.mapper.SysProjectFileMapper;
import com.bs.process.project.domain.SysProjectFile;
import com.bs.process.project.service.ISysProjectFileService;
import com.bs.common.config.Global;
import com.bs.common.core.text.Convert;
import com.bs.common.utils.DateUtils;
import com.bs.common.utils.file.FileUploadUtils;
import com.bs.framework.util.ShiroUtils;

/**
 * 项目文件Service业务层处理
 *
 * @author Xianlu Tech
 * @date 2020-06-13
 */
@Service
public class SysProjectFileServiceImpl implements ISysProjectFileService {

    @Autowired
    private SysProjectFileMapper sysProjectFileMapper;

    /**
     * 查询项目文件
     *
     * @param id 项目文件ID
     * @return 项目文件
     */
    @Override
    public SysProjectFile selectSysProjectFileById(Long id) {
        return sysProjectFileMapper.selectSysProjectFileById(id);
    }

    /**
     * 查询项目文件列表
     *
     * @param sysProjectFile 项目文件
     * @return 项目文件
     */
    @Override
    public List<SysProjectFile> selectSysProjectFileList(SysProjectFile sysProjectFile) {
        return sysProjectFileMapper.selectSysProjectFileList(sysProjectFile);
    }

    /**
     * 新增项目文件
     *
     * @param sysProjectFile 项目文件
     * @return 结果
     */
    @Override
    public int insertSysProjectFile(SysProjectFile sysProjectFile, MultipartFile[] files) {
        if (sysProjectFile == null)
            return -1;
        Long projectId = sysProjectFile.getProjectId();
        int row = 0;
        try {
            if (files != null && files.length > 0) {
                for (MultipartFile file : files) {
                    if (file.isEmpty()) {
                        continue;
                    }
                    SysProjectFile newFile = new SysProjectFile();
                    // 附件的源文件名称，暂时不用上
                    String extensionName = file.getOriginalFilename();
                    newFile.setProjectId(projectId);
                    newFile.setFileType(sysProjectFile.getFileType());
                    newFile.setFileName(extensionName);
                    newFile.setParentId(sysProjectFile.getId());
                    newFile.setCreateBy(ShiroUtils.getLoginName());
                    newFile.setUpdateBy(ShiroUtils.getLoginName());
                    String baseDIR = Global.getProfile() + Global.projectFile_dir + sysProjectFile.getFileType();
                    String fileName = Global.projectFile_dir+FileUploadUtils.upload(baseDIR, file);
                    newFile.setUrl(fileName);
                    newFile.setCrtTime(DateUtils.getNowDate());
                    newFile.setUpdateTime(DateUtils.getNowDate());
                    newFile.setExpirationTime(sysProjectFile.getExpirationTime());
                    row = sysProjectFileMapper.insertSysProjectFile(newFile);

                    int status = sysProjectFile.getStatus();
                    long parentId = sysProjectFile.getId();
                    SysProjectFile sysProjectFileParent = sysProjectFileMapper.selectSysProjectFileById(parentId);
                    if (sysProjectFileParent != null) {
                        sysProjectFileParent.setStatus(status);
                        sysProjectFileMapper.updateSysProjectFile(sysProjectFileParent);
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return row;

    }

    /**
     * 修改项目文件
     *
     * @param sysProjectFile 项目文件
     * @return 结果
     */
    @Override
    public int updateSysProjectFile(SysProjectFile sysProjectFile) {
        return sysProjectFileMapper.updateSysProjectFile(sysProjectFile);
    }

    /**
     * 删除项目文件对象
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deleteSysProjectFileByIds(String ids) {
        return sysProjectFileMapper.deleteSysProjectFileByIds(Convert.toStrArray(ids));
    }

    /**
     * 删除项目文件信息
     *
     * @param id 项目文件ID
     * @return 结果
     */
    @Override
    public int deleteSysProjectFileById(Long id) {
        return sysProjectFileMapper.deleteSysProjectFileById(id);
    }

    @Override
    public long selectCountSysProjectFileByParentId(Long parentId) {
        // TODO Auto-generated method stub
        return sysProjectFileMapper.selectCountSysProjectFileByParentId(parentId);
    }

}
